package com.example.springboottest.example.singleton;

/**
 * 静态内部类
 * 当第一次访问类中的静态字段时，会触发类加载，
 * 并且同一个类只加载一次。静态内部类也是如此，类加载过程由类加载器负责加锁，从而保证线程安全
 * 所以推荐这种写法，是因为这种写法相较于双重检测锁的写法，更加简洁明了，也更加不易出错。
 */
public class Sngleton4 {
    //私有的静态内部类，该静态内部类只会在 newinstance 方法中被使用
    private static class SingletonHolder {
        //静态字段
        public static Sngleton4 instance = new Sngleton4();
    }

    private Sngleton4() {
        System.out.println("只会实例一次...");
    }

    public static Sngleton4 newinstance() {
        return SingletonHolder.instance; // 访问静态内部类中的静态字段
    }
}
